<?php
/***
 * 产品模板工具 Service
 *
 *
 * @author    lanhongjie <lanhj@yunys.com.cn>
 * @copyright 2016 QuanZhouYunYiShang Inc.
 */

namespace App\Services\ProductTempService;


use App\Services\BrandService\BrandToolService;
use App\Services\ColourService\ColourTool;
use App\Services\ImgServices\ImgTool;
use App\Services\ProdTempCategoryService\ProdTempCategoryTool;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;

class ProductTempTool
{
    /****
     * 获取产品模板分类
     * @param $data
     * @return array
     */
    public function getProductTempCategorys($data,$is_mask_show=1){
        $per_page=isset($data['per_page'])?$data['per_page']:4;
        if(isset($data['product_temp_category_ids'])&&(!empty($data['product_temp_category_ids']))){
            $product_temp_category_ids=$data['product_temp_category_ids'];
            $temp_categorys=DB::table('product_temp_categorys')
                ->where(array('state'=>1,'type'=>2,'is_mask_show'=>$is_mask_show))
                ->whereIn('id',$product_temp_category_ids)
                ->select('id as product_temp_category_id','name','description','mask_ico as original_image')
                ->orderBy('type')
                ->orderBy('sort','desc')
                ->paginate($per_page);
        }else{
            $temp_categorys=DB::table('product_temp_categorys')->where(array('state'=>1,'type'=>2,'is_mask_show'=>$is_mask_show))
                ->select('id as product_temp_category_id','name','description','mask_ico as original_image')
                ->orderBy('type')
                ->orderBy('sort','desc')
                ->paginate($per_page);
        }
        return $temp_categorys;
    }

    /***
     * 获取所有产品模板分类
     * @param int $is_prod_list_show
     * @return array
     */
    public function getAllProductTempCategorys($is_prod_list_show=1,$show_special=true){

        $query=DB::table('product_temp_categorys')->where(array('state'=>1,'is_prod_list_show'=>$is_prod_list_show));
         if(!$show_special){
             $query->where('type',2);
         }else{
             $query-> orderBy('type');
         }
         $query->orderBy('sort','desc')
            ->select('name','original_image','id as product_temp_category_id');

        $temp_categorys=$query->get()->toArray();
        foreach ($temp_categorys as $temp_category){
            $original_image=$temp_category->original_image;
            $temp_category->original_image=ImgTool::getImgUrlByImgPath($original_image);
        }
        return empty($temp_categorys)?array():$temp_categorys;
    }

    /***
     * 获取产品模板分类下的所有产品模板
     * @param $temp_category_id
     * @return array
     */
    public function getAllProductTempIdsByCategoryId($temp_category_id){
        if(empty($temp_category_id)||!is_int($temp_category_id)){
                return array();
        }
        $product_temp_ids=DB::table('product_temps')->where(array('state'=>1,'product_temp_category_id'=>$temp_category_id))
            ->pluck('product_temp_id')
            ->toArray();
        return $product_temp_ids;
    }

    /***
     * 获取所有模板Id
     * @param int $state
     * @return array
     */
    public static function getAllProductTempIds($state=1){
        if(!is_int($state)){
            return array();
        }
        $query=DB::table('product_temps');
        if($state==1){
            $query->where('state',1);
        }
        $product_temp_ids=$query->pluck('product_temp_id')
                           ->toArray();
        return empty($product_temp_ids)?array():$product_temp_ids;
    }
    /***
     * 获取所有产品模板数组
     * @return array
     */
    public function getAllProductTempSimpleInfo(){
        $query=DB::table('product_temps')->where(array('state'=>1));
        $query->select('product_temp_id','name','brand_id');
        $product_temps=$query->get()->toArray();
        foreach ($product_temps as $product_temp){
            $product_temp->brand_name=BrandToolService::getBrandNameByBrandId($product_temp->brand_id);
        }
        return empty($product_temps)?array():$product_temps;
    }
    /***
     * 获取产品模板数组
     * @param array $product_temp_ids
     * @return array
     */
    public function getProductTempsByProductTempIds(array $product_temp_ids){
        $product_temps=DB::table('product_temps')
            ->where(array('state'=>1))
            ->whereNotIn('product_temp_id',$product_temp_ids)
            ->select('name','product_temp_id','brand_id')
            ->get()
            ->toArray();
        foreach ($product_temps as $product_temp){
            $product_temp->brand_name=BrandToolService::getBrandNameByBrandId($product_temp->brand_id);
        }
        return $product_temps;
    }

    /***
     * 在指定的模板Id数组中获取产品模板数组信息
     * @param array $product_temp_ids
     * @return mixed
     */
    public function getProductTempsWhereInProductTempIds(array $product_temp_ids){
        $product_temps=DB::table('product_temps')
            ->where(array('state'=>1))
            ->whereIn('product_temp_id',$product_temp_ids)
            ->select('name','product_temp_id','brand_id')
            ->get()
            ->toArray();
        foreach ($product_temps as $product_temp){
            $product_temp->brand_name=BrandToolService::getBrandNameByBrandId($product_temp->brand_id);
        }
        return $product_temps;
    }

    /***
     * 获取产品模板名称
     * @param $product_temp_id
     * @param int $state
     * @return string
     */
    public function getProductTempNameByProductTempId($product_temp_id,$state=1){
        if(empty($product_temp_id)){
            return '';
        }
        $query=DB::table('product_temps')->where(array('product_temp_id'=>$product_temp_id));
        if($state===1){
            $query->where('state',1);
        }
        $name=$query->value('name');
        return empty($name)?'':$name;
    }
    /**
     * 数据验证
     * @param Request $request
     * @param $check_data
     * @return mixed
     */
    public static function store(Request $request,$check_data)
    {
        $v = Validator::make($request->all(), $check_data);
        return $v;
    }

    /***
     * 删除产品模板
     * @param $product_temp_id
     * @return bool
     */
    public static function delProdTempByBrandId($brand_id)
    {
        if(empty($brand_id)){
            return false;
        }
        $update_res=DB::table('product_temps')->where(array('state'=>1,'brand_id'=>$brand_id))
            ->update(array('updated_at'=>time(),'state'=>0));
        return ($update_res>0)?true:false;
    }

    /***
     * 模板分类获取模板Id数组
     * @param $temp_category_id
     * @return array
     */
    public static function getProdTempIdsByCategoryId($temp_category_id)
    {
        if(empty($temp_category_id)){
            return array();
        }
        $product_temp_ids=DB::table('product_temps')->where(array('state'=>1,'product_temp_category_id'=>$temp_category_id))
            ->pluck('product_temp_id')->toArray();
        return $product_temp_ids;
    }
    /***
     * 模板Id筛选
     * @param array $data
     * @return array
     */
    public static function getProdTempIds(array $conditional_array,$temp_categoty_id)
    {
        try{
            $product_temp_ids=array();
            $i=0;
            foreach ($conditional_array as $conditional){
                if(is_array($conditional)){
                    $type=$conditional['type'];
                    $search_condition=$conditional['search_condition'];
                    $new_product_temp_ids=self::searchProdTempConditionsMatch($search_condition,$type,$temp_categoty_id);
                    if(empty($new_product_temp_ids)){
                        return array();
                    }
                    if($i===0){
                        $product_temp_ids=$new_product_temp_ids;
                    }else{
                        $product_temp_ids=array_intersect($product_temp_ids,$new_product_temp_ids);
                    }
                }else{
                    return array();
                }
                $i++;
            }
            if($temp_categoty_id===0){
                $query = DB::table('product_temps')->where(array('state'=>1))
                    ->whereIn('product_temp_id',$product_temp_ids);
            }else{
                $query = DB::table('product_temps')->where(array('state'=>1,'product_temp_category_id'=>$temp_categoty_id))
                    ->whereIn('product_temp_id',$product_temp_ids);
            }
            $temp_ids=$query->pluck('product_temp_id')->toArray();
            return $temp_ids;
        }catch (\Exception $e){
            Log::info($e);
            return array();
        }
    }

    /***
     * 获取产品模板价格
     * @param $product_temp_id
     * @param $colour_id
     * @return bool
     */
    public static function getProdTempPrice($product_temp_id,$colour_id,$state=1)
    {
        if(empty($product_temp_id)||empty($colour_id)){
            return false;
        }
        if($state===1){
            $price= DB::table('product_temp_colours')->where(array('state'=>$state,'product_temp_id'=>$product_temp_id,'colour_id'=>$colour_id))
                ->value('original_price');
        }else{
            $price= DB::table('product_temp_colours')->where(array('product_temp_id'=>$product_temp_id,'colour_id'=>$colour_id))
                ->value('original_price');
        }
        return ($price===null)?false:$price;
    }

    /***
     * 产品模板获取品牌Id
     * @param $product_temp_id
     * @return bool
     */
    public static function getBrandIdByProductTempId($product_temp_id)
    {
        if(empty($product_temp_id)){
            return false;
        }
        $brand_id= DB::table('product_temps')->where(array('state'=>1,'product_temp_id'=>$product_temp_id))
            ->value('brand_id');
        return (empty($brand_id))?false:$brand_id;
    }

    /***
     * 判断产品模板是不是存在
     * @param $product_temp_id
     * @return bool
     */
    public static function productTempExistsByProdTempId($product_temp_id)
    {
        if(empty($product_temp_id)){
            return false;
        }
        $num= DB::table('product_temps')->where(array('state'=>1,'product_temp_id'=>$product_temp_id))
            ->count();
        return ($num===0)?false:true;
    }

    /***
     * 判断产品模板属性类型是不是存在
     * @param $id
     * @return bool
     */
    public static function productTempAttrExistsById($id)
    {
        if(empty($id)||!is_int($id)){
            return false;
        }
        $num= DB::table('product_temp_attributes')->where(array('state'=>1,'attr_id'=>$id))
            ->count();
        return ($num===0)?false:true;
    }

    /***
     * id获取产品模板属性
     * @param $id
     * @return null
     */
    public static function getProductTempAttById($id)
    {
        if(empty($id)||!is_int($id)){
            return null;
        }
        $temp_attribute= DB::table('product_temp_attributes')->where(array('state'=>1,'attr_id'=>$id))
            ->first();
        return $temp_attribute;
    }
    /***
     * 定制区域对应位置类型
     * @param $temp_category_id
     * @return array
     */
    public static function productTempCustomZonePositionsByCategoryId($temp_category_id)
    {
        if(empty($temp_category_id)){
            return array();
        }
        $temp_custom_zone_positions= DB::table('product_temp_custom_zone_positions')->where(array('state'=>1,'temp_category_id'=>$temp_category_id))
            ->select('position_type','position_name','temp_category_id')
            ->get()
            ->toArray();
        return empty($temp_custom_zone_positions)?array():$temp_custom_zone_positions;
    }

    /***
     * 产品模板id和颜色Id,获取该模板下可打印区域数组
     * @param $temp_id
     * @param $colour_id
     * @return array
     */
    public static function productTempCustomZonePositionNamesByTempId($temp_id,$colour_id)
    {
        if(empty($temp_id)||empty($colour_id)||!is_numeric($colour_id)){
            return array();
        }
        $colour_id=intval($colour_id);
        $product_temp_colour_id=self::getProductTempColourIdByProductTempIdAndColourId($temp_id,$colour_id);
        if(empty($product_temp_colour_id)){
            return array();
        }
        $product_temp_custom_zones= DB::table('product_temp_custom_zones')->where(array('state'=>1,'prod_temp_colour_id'=>$product_temp_colour_id))
            ->select('position_name','position_type')
            ->get()
            ->toArray();
        return empty($product_temp_custom_zones)?array():$product_temp_custom_zones;
    }
    /***
     * 查看产品模板是不是存在
     * @param $id
     * @return bool
     */
    public static function productTempExistsById($id)
    {
        if(empty($id)){
            return false;
        }
        $num= DB::table('product_temps')->where(array('state'=>1,'id'=>$id))
            ->count();
        return ($num===0)?false:true;
    }
    /***
     * 获取产品模板下的对应几种颜色
     * @param int $per_page
     * @return null
     */
    public  function getProdTempColourByProdTempId($product_temp_id,$per_page=10)
    {
        if(empty($product_temp_id)){
            return null;
        }
        $product_temp_colours= DB::table('product_temp_colours')->where(array('state'=>1,'product_temp_id'=>$product_temp_id))
            ->orderBy('sort','ACS')
            ->select('product_temp_id','colour_id','custom_num_of_zones','original_price','id')
            ->paginate($per_page);
        return $product_temp_colours;
    }

    /***
     * 获取产品模板中第一个颜色
     * @param $product_temp_id
     * @return null
     */
    public  function getProdTempFirstColourByProdTempId($product_temp_id)
    {
        if(empty($product_temp_id)){
            return null;
        }
        $product_temp_colour= DB::table('product_temp_colours')->where(array('state'=>1,'product_temp_id'=>$product_temp_id))
            ->orderBy('sort','desc')
            ->first();
        return $product_temp_colour;
    }

    /****
     * 获取模板 某种颜色下的制作区域
     * @param $prod_temp_colour_id
     * @return null
     */
    public  function getProdTempCustomZonesByProdTempColourId($prod_temp_colour_id,$need_craftsmanships=0,$platform)
    {
        if(empty($prod_temp_colour_id)){
            return array();
        }
        $query= DB::table('product_temp_custom_zones')->where(array('state'=>1,'prod_temp_colour_id'=>$prod_temp_colour_id))
            ->orderBy('custom_num_of_zones','asc');
        $query->select(
            'original_image',
            'thumbnail',
            'custom_the_area_aspect_ratio',
            'custom_width_and_screen_width_ratio',
            'thumbnail',
            'id',
            'position_name',
            'position_type as position_num'
        );
         $product_temp_custom_zones =$query->get()->toArray();
        foreach ($product_temp_custom_zones as $product_temp_custom_zone){
            $product_temp_custom_zone->custom_the_area_aspect_ratio=(float)$product_temp_custom_zone->custom_the_area_aspect_ratio;
            $product_temp_custom_zone->custom_width_and_screen_width_ratio=(float)$product_temp_custom_zone->custom_width_and_screen_width_ratio;
            if($need_craftsmanships===1){
                $craftsmanships=self::getProdTempCraftsmanshipsByProdTempCustomZoneId($product_temp_custom_zone->id);
                foreach ($craftsmanships as $craftsmanship){
                   $product_temp_craftsmanship_id= $craftsmanship->product_temp_craftsmanship_id;
                   $colour_ids=ProductTempTool::getCraftsmanshipColourIdsByCraftsmanshipId($product_temp_craftsmanship_id);
                    $colours=array();
                    foreach ($colour_ids as $colour_id){
                        $colours[]=ColourTool::getColourByColourId($colour_id);
                    }
                    $craftsmanship->colours=empty($colours)?array():$colours;
                }
                $product_temp_custom_zone->craftsmanships=$craftsmanships;
            }
            if(!empty($product_temp_custom_zone->original_image)){
                $original_image=ImgTool::getImgUrlByImgPath($product_temp_custom_zone->original_image);
                $product_temp_custom_zone->original_image=empty($original_image)?'':$original_image;
            }
            if(!empty($product_temp_custom_zone->thumbnail)){
                $thumbnail=ImgTool::getImgUrlByImgPath($product_temp_custom_zone->thumbnail);
                $product_temp_custom_zone->thumbnail=empty($thumbnail)?'':$thumbnail;
            }
        }
        return $product_temp_custom_zones;
    }
    public  function getProdTempCustomZonesImagesByProdTempColourId($prod_temp_colour_id)
    {
        if(empty($prod_temp_colour_id)){
            return array();
        }
        $query= DB::table('product_temp_custom_zones')->where(array('state'=>1,'prod_temp_colour_id'=>$prod_temp_colour_id))
            ->orderBy('custom_num_of_zones','asc');
        $query->select(
            'original_image',
            'thumbnail'
        );
        $product_temp_custom_zones =$query->get()->toArray();
        foreach ($product_temp_custom_zones as $product_temp_custom_zone){
            if(!empty($product_temp_custom_zone->original_image)){
                $original_image=ImgTool::getImgUrlByImgPath($product_temp_custom_zone->original_image);
                $product_temp_custom_zone->original_image=empty($original_image)?'':$original_image;
            }
            if(!empty($product_temp_custom_zone->thumbnail)){
                $thumbnail=ImgTool::getImgUrlByImgPath($product_temp_custom_zone->thumbnail);
                $product_temp_custom_zone->thumbnail=empty($thumbnail)?'':$thumbnail;
            }
        }
        return $product_temp_custom_zones;
    }
    /***
     * 定制区域可使用工艺
     * @param $temp_custom_zone_id
     * @return array
     */
    public  function getProdTempCraftsmanshipsByProdTempCustomZoneId($temp_custom_zone_id)
    {
        if(empty($temp_custom_zone_id)){
            return array();
        }
        $product_temp_craftsmanships= DB::table('product_temp_craftsmanships')->where(array('state'=>1,'temp_custom_zone_id'=>$temp_custom_zone_id))
            ->select('craftsmanship_type','id as product_temp_craftsmanship_id','craftsmanship_name')
            ->get();
        return $product_temp_craftsmanships;
    }

    /***
     * 获取产品模板详情
     * @param $product_temp_id
     * @return null
     */
    public  function getProdTempDetailByProdTempId($product_temp_id,$colour_id,$state=1)
    {
        try{
            if(empty($product_temp_id)||empty($colour_id)){
                return null;
            }
            $query= DB::table('product_temps')->where(array('product_temp_id'=>$product_temp_id));
            if($state===1){
                $query->where('state',1);
            }
            $product_temp=$query->select('product_temp_id','brand_id','postage','name as product_temp_name','state')
                ->first();
            if(empty($product_temp)){
                return null;
            }
            //产品模板颜色映射表
            $product_temp_query=DB::table('product_temp_colours')->where(array('product_temp_id'=>$product_temp_id,'colour_id'=>$colour_id));
            if($state===1){
                $product_temp_query->where('state',1);
            }
            $product_temp_colour=$product_temp_query->first();
            if($product_temp_colour->state != 1){
                $product_temp->state = 0;
            }
            $product_temp->preferential_price=0;
            //优惠价接入
            if(!empty($product_temp_colour)){
                $product_temp->preferential_price=$product_temp_colour->original_price;
                $product_temp->original_price=$product_temp_colour->original_price;
                $product_temp_custom_zone=DB::table('product_temp_custom_zones')->where(array('state'=>1,'prod_temp_colour_id'=>$product_temp_colour->id))
                    ->orderBy('sort','ASC')
                    ->select('thumbnail','id')
                    ->first();
                $thumbnail=empty($product_temp_custom_zone->thumbnail)?'':$product_temp_custom_zone->thumbnail;
            }else{
                return null;
            }
            $brand_id=$product_temp->brand_id;
            $brand=BrandToolService::getBrandByBrandId($brand_id);
            $product_temp->brand_name='';
            $product_temp->user_id=0;
            if(!empty($brand)){
                $product_temp->brand_name=empty($brand->brand_name)?'':$brand->brand_name;
                $product_temp->user_id=empty($brand->user_id)?0:$brand->user_id;
            }
            $product_temp->thumbnail=(isset($thumbnail))?ImgTool::getImgUrlByImgPath($thumbnail):'';
            return $product_temp;
        }catch (\Exception $e){
            Log::info($e);
            return null;
        }
    }

    /***
     * 还有没有库存
     * @param $product_temp_id 模板Id
     * @param $colour_name     颜色名
     * @param $size_name      尺寸名
     * @param int $num        数量
     * @return bool
     */
    public static function hasStock($product_temp_id,$colour_name,$size_name,$num=1){
        //数量不是整数时直接返回false
        if (!is_int($num)){
            return false;
        }
        $temp_stock=self::getStock($product_temp_id,$colour_name,$size_name);

        if(empty($temp_stock)){
            return false;
        }
        //判断库存够不够
        if(isset($temp_stock['stock'])&&($temp_stock['stock']<$num)){
            return false;
        }
        return true;
    }

    /***
     * 产品模板获取库存
     * @param $product_temp_id   产品模板ID
     * @param $colour_name       颜色名
     * @param $size_name         尺码名
     * @return array
     */
    public static function getStock($product_temp_id,$colour_name,$size_name){
        if(empty($product_temp_id)||empty($colour_name)||empty($size_name)){
            return array();
        }
        $product_temp_id=trim($product_temp_id);
        $colour_name=trim($colour_name);
        $size_name=trim($size_name);
        $time=time();
        $product_temp_stock=DB::table('product_temp_stocks')
            ->where(array(
                'state'=>1,
                'trading_status'=>1,
                'colour_name'=>$colour_name,
                'size_name'=>$size_name,
                'product_temp_id'=>$product_temp_id
            ))
            ->where('stock','>',0)
            ->select('price as original_price','stock')
            ->first();
        if(empty($product_temp_stock)){
            return array();
        }
        return array('original_price'=>$product_temp_stock->original_price,
            'preferential_price'=>$product_temp_stock->original_price,
            'preferential_stock'=>$product_temp_stock->stock,
            'stock'=>$product_temp_stock->stock);
    }

    /***
     * 获取产品模板实际库存数
     * @param $product_temp_id
     * @param $colour_name
     * @param $size_name
     * @return null
     */
    public  static function getActualStock($product_temp_id,$colour_name,$size_name){
        if(empty($product_temp_id)||empty($colour_name)||empty($size_name)){
            return null;
        }
        $product_temp_id=trim($product_temp_id);
        $colour_name=trim($colour_name);
        $size_name=trim($size_name);
        $time=time();
        $actual_stock=DB::table('product_temp_stocks')
            ->where(array(
                'state'=>1,
                'trading_status'=>1,
                'colour_name'=>$colour_name,
                'size_name'=>$size_name,
                'product_temp_id'=>$product_temp_id
            ))
            ->value('actual_stock');
        return $actual_stock;
    }

    /***
     * 按照SKU获取模板实际库存
     * @param $sku
     * @return null
     */
    public  static function getActualStockBySku($sku){
        $sku=trim($sku);
        if(empty($sku)){
            return null;
        }
        $actual_stock=DB::table('product_temp_stocks')
            ->where(array(
                'state'=>1,
                'sku'=>$sku,
            ))
            ->value('actual_stock');
        return $actual_stock;
    }
    /***
     *减少库存
     * @param array $data
     * @return bool
     */
    public static function decrementStock($product_temp_id,$colour_name,$size_name,$num=1){
        $time_str=date("Y-m-d H:i:s", time());
        Log::info( $time_str.',begin 减少库存  **************************');
        Log::info(array('product_temp_id'=>$product_temp_id,'colour_name'=>$colour_name,'size_name'=>$size_name,'num'=>$num));
        Log::info( $time_str.',end 减少库存  **************************');
        if(empty($num)||!is_int($num)||($num<1)){
            return 0;
        }
        //实际库存数
        $actual_stock=self::getActualStock($product_temp_id,$colour_name,$size_name);
        if(!empty($actual_stock)){
            if($actual_stock<$num){
                $update_actual_stock=0;
            }else{
                $update_actual_stock=$actual_stock-$num;
            }
            self::updateProdTempActualStockInDB($product_temp_id,$colour_name,$size_name,$update_actual_stock);
        }
        $stock=self::getProdTempStock($product_temp_id,$colour_name,$size_name);
        if(empty($stock)||($stock<$num)){
            return 0;
        }
        $stock=$stock-$num;
        self::updateProdTempStockInDB($product_temp_id,$colour_name,$size_name,$stock);
        return true;
    }

    /***
     * 增加库存
     * @param array $data
     * @return bool
     */
    public static function incrementStock($product_temp_id,$colour_name,$size_name,$num=1){
        $time_str=date("Y-m-d H:i:s", time());
        Log::info( $time_str.',begin 增加库存  **************************');
        Log::info(array('product_temp_id'=>$product_temp_id,'colour_name'=>$colour_name,'size_name'=>$size_name,'num'=>$num));
        Log::info( $time_str.',end 增加库存  **************************');
        //实际库存数
        $actual_stock=self::getActualStock($product_temp_id,$colour_name,$size_name);
        if($actual_stock!=null){
            $update_actual_stock=$actual_stock+$num;
            self::updateProdTempActualStockInDB($product_temp_id,$colour_name,$size_name,$update_actual_stock);
        }
        $stock=self::getProdTempStock($product_temp_id,$colour_name,$size_name);
        if(empty($stock)||($stock<$num)||!is_int($stock)){
            return 0;
        }
        $stock=$stock+$num;
        $res=self::updateProdTempStockInDB($product_temp_id,$colour_name,$size_name,$stock);
        return $res;
    }
    /***
     * 是否使用指定素材
     * @param $product_temp_id
     * @return null
     */
    public static function isUseSpecifiedSourcePic($product_temp_id){
        $product_temp_id=trim($product_temp_id);
        if(empty($product_temp_id)){
            return null;
        }
        $product_temp_stock=DB::table('product_temps')
            ->where(array('product_temp_id'=>$product_temp_id))
            ->value('is_use_specified_source_pic');
        return $product_temp_stock;
    }

    /***
     * 获取产品模板单条记录
     * @param $product_temp_id
     * @return null
     */
    public function getProdTempByProdTempId($product_temp_id){
        $product_temp_id=trim($product_temp_id);
        if(empty($product_temp_id)){
            return null;
        }
        $product_temp=DB::table('product_temps')
            ->where(array('state'=>1,'product_temp_id'=>$product_temp_id))
            ->first();
        return $product_temp;
    }

    /****
     * 获取产品模板主要信息
     * @param $product_temp_id
     * @return null
     */
    public function getProdTempSimpleInfoByProdTempId($product_temp_id){
        $product_temp_id=trim($product_temp_id);
        if(empty($product_temp_id)){
            return null;
        }
        $product_temp=DB::table('product_temps')
            ->where(array('state'=>1))
            ->select('product_temp_id','name','product_temp_category_id','description','postage')
            ->first();
        return $product_temp;
    }
    /***
     * 搜索条件匹配
     * @param array $condition
     * @param $type
     * @param $temp_categoty_id
     * @return array
     */
    public static function searchProdTempConditionsMatch(array $condition,$type,$temp_categoty_id){
        try{
            $product_temp_ids=array();
            switch ($type)
            {
                case 2:
                    $crowd_ids=array();
                    foreach ($condition as $crowd_id){
                        $crowd_ids[]=intval($crowd_id);
                    }
                    //按人群
                    $product_temp_ids=DB::table('product_temp_crowds')->where(array('state'=>1))
                        ->whereIn('crowd_id',$crowd_ids)
                        ->pluck('product_temp_id')
                        ->toArray();
                    break;
                case 3:
                    $product_temp_ids=DB::table('product_temps')->where(array('state'=>1))
                        ->whereIn('brand_id',$condition)
                        ->pluck('product_temp_id')
                        ->toArray();
                    break;
                case 4:
                    $colour_ids=array();
                    foreach ($condition as $colour_id){
                        $colour_ids[]=intval($colour_id);
                    }
                    $product_temp_ids=DB::table('product_temp_colours')->where(array('state'=>1))
                        ->whereIn('colour_id',$colour_ids)
                        ->pluck('product_temp_id')
                        ->toArray();
                    break;
                case 5:
                    $query=DB::table('product_temp_attr_maps')->where(array('state'=>1));
                    if($temp_categoty_id!==0){
                        $query->where(array('category_id'=>$temp_categoty_id));
                    }
                    $query->whereIn('attr_value',$condition);

                    $product_temp_ids=$query->pluck('product_temp_id')->toArray();
                    break;
                default:
                    break;
            }
            return $product_temp_ids;
        }catch (\Exception $e){
            Log::info($e);
            return array();
        }
    }

    /***
     *工艺类型获取工艺名
     * @param $craftsmanship_type
     * @return array|string
     */
    public static function getCraftsmanshipNameByCraftsmanshipId($craftsmanship_type){
        try{
            if(!is_int($craftsmanship_type)||($craftsmanship_type<=0)){
                return '';
            }
            $craftsmanship_name='';
            switch ($craftsmanship_type)
            {
                case 1:
                    $craftsmanship_name='打印';
                    break;
                case 2:
                    $craftsmanship_name='绣花';
                    break;
                default:
                    break;
            }
            return $craftsmanship_name;
        }catch (\Exception $e){
            Log::info($e);
            return array();
        }
    }
    public static function getPositionNameByPositionId($position_id){
        try{
            if(!is_int($position_id)||($position_id<=0)){
                return '';
            }
            $position_name='';
            switch ($position_id)
            {
                case 1:
                    $position_name='正面';
                    break;
                case 2:
                    $position_name='背面';
                    break;
                case 3:
                    $position_name='左肩';
                    break;
                case 4:
                    $position_name='右肩';
                    break;
                case 5:
                    $position_name='左脚';
                    break;
                case 6:
                    $position_name='右脚';
                    break;
                default:
                    break;
            }
            return $position_name;
        }catch (\Exception $e){
            Log::info($e);
            return '';
        }
    }
    /***
     * 产品模板Id获取对应尺码组
     * @param $prod_temp_id
     * @return array
     */
    public static function getProdTempSizesByProdTempId($prod_temp_id){
        $prod_temp_id=trim($prod_temp_id);
        if(empty($prod_temp_id)){
            return array();
        }
        $size_names=DB::table('product_temp_sizes')
            ->where(array('state'=>1,'product_temp_id'=>$prod_temp_id))
            ->pluck('size_name')
            ->toArray();
        return $size_names;
    }

    /***
     * id获取产品模板尺码记录
     * @param $id
     * @param int $state
     * @return null
     */
    public static function getProdTempSizeById($id,$state=1){
        if(empty($id)){
            return null;
        }
        $query=DB::table('product_temp_sizes')->where(array('id'=>$id));
        if($state===1){
            $query->where('state',1);
        }
        $product_temp_size=$query->first();
        return $product_temp_size;
    }
    /***
     * 获取产品模板邮费
     * @param $prod_temp_id
     * @return null
     */
    public static function getProdTempPostageByProdTempId($prod_temp_id){
        $prod_temp_id=trim($prod_temp_id);
        if(empty($prod_temp_id)){
            return null;
        }
        $postage=DB::table('product_temps')
            ->where(array('state'=>1,'product_temp_id'=>$prod_temp_id))
            ->value('postage');
        return $postage;
    }
    /***
     * 获取最顶级Tag_id
     * @param $tag_id
     * @return int|null
     */
    public static function getTopTagIdByTagId($tag_id)
    {
        if(empty($tag_id)||!is_int($tag_id)){
            return null;
        }
        $top_tag_id=$tag_id;
        $p_tag_id=$tag_id;
        do {
            $top_tag_id=$p_tag_id;
            $p_tag_id=self::getParentsTagIdByTagId($p_tag_id);
        } while (!empty($p_tag_id));
        return $top_tag_id;
    }

    /***
     * 获取父级Tag_id
     * @param $tag_id
     * @return null
     */
    private static function getParentsTagIdByTagId($tag_id)
    {
        if(empty($tag_id)||!is_int($tag_id)){
            return null;
        }
        $p_tag_id=DB::table('tags')->where(array('id'=>$tag_id,'state'=>1))
            ->value('pid');
        return ($p_tag_id===0)?null:$p_tag_id;
    }

    /****
     * 获取标签
     * @param $tag_id
     * @return null
     */
    public static function getTagByTagId($tag_id)
    {
        if(empty($tag_id)||!is_int($tag_id)){
            return null;
        }
        $tag=DB::table('tags')->where(array('id'=>$tag_id,'state'=>1))
            ->first();
        return $tag;
    }
    /***
     * 添加库存
     * @param $product_temp_id
     * @param $colour_name
     * @param $size_name
     * @return bool
     */
    private static function updateProdTempStockInDB($product_temp_id,$colour_name,$size_name,$num){
        if(empty($product_temp_id)||empty($colour_name)||empty($size_name)||empty($num)||(!is_int($num))){
            return 0;
        }
        $time_str=date("Y-m-d H:i:s", time());
        Log::info( $time_str.',begin 更新库存  **************************');
        Log::info(array('product_temp_id'=>$product_temp_id,'colour_name'=>$colour_name,'size_name'=>$size_name,'num'=>$num));
        Log::info( $time_str.',end 更新库存  **************************');
        $res=DB::table('product_temp_stocks')->where(array(
            'product_temp_id'=>$product_temp_id,
            'colour_name'=>$colour_name,
            'size_name'=>$size_name
        ))->update(array(
            'stock'=>$num,
            'updated_at'=>time()
        ));
        return $res;
    }

    /***
     * 更新实际库存
     * @param $product_temp_id
     * @param $colour_name
     * @param $size_name
     * @param $num
     * @return int
     */
    private static function updateProdTempActualStockInDB($product_temp_id,$colour_name,$size_name,$num){
        if(empty($product_temp_id)||empty($colour_name)||empty($size_name)||empty($num)||(!is_int($num))){
            return 0;
        }
        $time_str=date("Y-m-d H:i:s", time());
        Log::info( $time_str.',begin 更新实际库存  **************************');
        Log::info(array('product_temp_id'=>$product_temp_id,'colour_name'=>$colour_name,'size_name'=>$size_name,'num'=>$num));
        Log::info( $time_str.',end 更新实际库存  **************************');
        $res=DB::table('product_temp_stocks')->where(array(
            'product_temp_id'=>$product_temp_id,
            'colour_name'=>$colour_name,
            'size_name'=>$size_name
        ))->update(array(
            'actual_stock'=>$num,
            'updated_at'=>time()
        ));
        return $res;
    }

    /***
     * 更新实际库存
     * @param $sku
     * @param $actual_stock
     * @return int
     */
    public  function updateProdTempActualStockBySKuInDB($sku,$actual_stock){
        $sku=trim($sku);
        if(empty($sku)){
            return 0;
        }
        $time_str=date("Y-m-d H:i:s", time());
        Log::info( $time_str.',begin 更新实际库存  **************************');
        Log::info(array('sku'=>$sku,'actual_stock'=>$actual_stock));
        Log::info( $time_str.',end 更新实际库存  **************************');
        $res=DB::table('product_temp_stocks')->where(array(
            'sku'=>$sku,
            'state'=>1
        ))->update(array(
            'actual_stock'=>$actual_stock,
            'updated_at'=>time()
        ));
        return $res;
    }
    /***
     * 获取某一具体产品模板库存，需考虑颜色和尺码
     * @param $product_temp_id
     * @param $colour_name
     * @param $size_name
     * @return null
     */
    public static function getProdTempStock($product_temp_id,$colour_name,$size_name){
        if(empty($product_temp_id)||empty($colour_name)||empty($size_name)){
            return null;
        }
        $stock=DB::table('product_temp_stocks')->where(array(
            'product_temp_id'=>$product_temp_id,
            'colour_name'=>$colour_name,
            'size_name'=>$size_name
        ))->value('stock');
        return $stock;
    }

    /***
     * 产品模板ID和颜色ID获取尺码名数组
     * @param $product_temp_id
     * @param $colour_id
     * @param int $state
     * @return array
     */
    public static function getProductTempSizeNamesByProductTempIdAndColourId($product_temp_id,$colour_id,$state=1){
        if(empty($product_temp_id)||empty($colour_id)){
            return array();
        }
        $query=DB::table('product_temp_stocks')->where(array(
            'product_temp_id'=>$product_temp_id,
            'colour_id'=>$colour_id,
        ));
        if($state==1){
            $query->where('state',1);
        }
        $size_names=$query->pluck('size_name')->toArray();
        return empty($size_names)?array():$size_names;
    }
    /***
     * 获取产品模板库存记录
     * @param $product_temp_id
     * @param $colour_name
     * @param $size_name
     * @return null
     */
    public static function getProdTempStockInfo($product_temp_id,$colour_name,$size_name,$state=1){
        if(empty($product_temp_id)||empty($colour_name)||empty($size_name)){
            return null;
        }
        $query=DB::table('product_temp_stocks')->where(array(
            'product_temp_id'=>$product_temp_id,
            'colour_name'=>$colour_name,
            'size_name'=>$size_name
        ));
        if($state===1){
            $query->where('state',1);
        }
        $stock=$query->first();
        return $stock;
    }

    /***
     * 产品模板ID数组获取库存信息
     * @param array $product_temp_ids
     * @return array
     */
    public  function getProductTempStocksWhereInProductTemps(array $product_temp_ids){
        if(empty($product_temp_ids)){
            return array();
        }
        $query=DB::table('product_temp_stocks')->where(array(
            'state'=>1,
        ));
        $query->whereIn('product_temp_id',$product_temp_ids);
        $query->orderBy('product_temp_id');
        $query->select('product_temp_id','colour_id','colour_name','size_name','sku','actual_stock');
        $temp_stocks=$query->get()->toArray();
        return  empty($temp_stocks)?array():$temp_stocks;
    }
    /***
     * 增加作品模板使用量
     * @param $product_temp_id
     * @return bool
     */
    private static function incrementProdTempUsedNumInDB($product_temp_id){
        if(empty($product_temp_id)){
            return false;
        }
        $res=DB::table('product_temp')->where(array(
            'product_temp_id'=>$product_temp_id,
        ))->increment('used_num');
        return ($res===1)?true:false;
    }

    /***
     * 减少产品模板使用量
     * @param $product_temp_id
     * @return bool
     */
    private static function decrementProdTempUsedNumInDB($product_temp_id){
        if(empty($product_temp_id)){
            return false;
        }
        $res=DB::table('product_temp')->where(array(
            'product_temp_id'=>$product_temp_id,
        ))->decrement('used_num');
        return ($res===1)?true:false;
    }
    /***
     * 减少使用数
     * @param $product_temp_id
     * @param $colour_name
     * @param $size_name
     * @return bool
     */
    private static function decrementUsedNumInDB($product_temp_id,$colour_name,$size_name){
        if(empty($product_temp_id)||empty($colour_name)||empty($size_name)){
            return false;
        }
        $res=DB::table('product_temp_stocks')->where(array(
            'product_temp_id'=>$product_temp_id,
            'colour_name'=>$colour_name,
            'size_name'=>$size_name
        ))->decrement('used_num');
        return ($res===1)?true:false;
    }

    /***
     * 产品模板Id获取品牌Id
     * @param $product_temp_id
     * @return null
     */
    public static function getBrandIdByProdTempId($product_temp_id){
        if(empty($product_temp_id)){
            return null;
        }
        $brand_id=DB::table('product_temps')->where(array(
            'product_temp_id'=>$product_temp_id,
        ))->value('brand_id');
        return $brand_id;
    }

    /***
     * 获取人群名
     * @param $product_temp_id
     * @return string
     */
    public static function getProdTempCrowdNameByProdTempId($product_temp_id){
        if(empty($product_temp_id)){
            return '';
        }
        $num=DB::table('product_temp_crowds')->where(array(
            'product_temp_id'=>$product_temp_id,
            'state'=>1,
        ))->count();
        if($num>1){
            return '通用';
        }elseif($num<1){
            return '';
        }
        $crowd_name=DB::table('product_temp_crowds')->where(array(
            'product_temp_id'=>$product_temp_id,
            'state'=>1,
        ))->value('crowd_name');
        return empty($crowd_name)?'':$crowd_name;
    }

    /***
     * 获取品牌Id
     * @param $product_temp_id
     * @return int
     */
    public static function getProdTempBrandIdByProdTempId($product_temp_id){
        if(empty($product_temp_id)){
            return 0;
        }
        $brand_id=DB::table('product_temps')->where(array(
            'product_temp_id'=>$product_temp_id,
            'state'=>1,
        ))->value('brand_id');
        return empty($brand_id)?0:$brand_id;
    }
    /****
     * 获取产品模板尺码组
     * @param $product_temp_id
     * @return null
     */
    public static function goodsDetailGetProdTempSizeListByProdTempId($product_temp_id){
        if(empty($product_temp_id)){
            return null;
        }
        $temp_size_format=self::getProdTempSizeFormatByProdTempId($product_temp_id);
        if(empty($temp_size_format)){
            return null;
        }
        if(empty($temp_size_format->size_list)){
            $size_list=array();
        }else{
            $size_list=explode('|',$temp_size_format->size_list);
        }
        if($size_list>2){
            $temp_size_format->size_list=$size_list;
        }else{
            $temp_size_format->size_list=array();
        }
        $temp_size_format->measure_method_image=ImgTool::getImgUrlByImgPath($temp_size_format->measure_method_image);
        $temp_sizes=DB::table('product_temp_sizes')->where(array(
            'product_temp_id'=>$product_temp_id,
            'state'=>1,
        ))
            ->pluck('size_values')
            ->toArray();
        $temp_size_arr=array();
        foreach ($temp_sizes as $temp_size){
            if(empty($temp_size)){
                continue;
            }
            $size_value_arr=explode('|',$temp_size);
            if($size_value_arr>2){
                $temp_size_arr[]=$size_value_arr;
            }
        }
        $temp_size_format->temp_sizes=empty($temp_size_arr)?array():$temp_size_arr;
        return $temp_size_format;
    }

    /***
     * 产品模板尺码规则
     * @param $product_temp_id
     * @return null
     */
    public static function getProdTempSizeFormatByProdTempId($product_temp_id){
        if(empty($product_temp_id)){
            return null;
        }
        $temp_size_format=DB::table('product_temp_size_formats')->where(array(
            'product_temp_id'=>$product_temp_id,
            'state'=>1,
        ))->select('measure_method_image','size_list')
            ->first();
        return $temp_size_format;
    }

    /***
     * 更新产品模板使用量
     * @param $product_temp_id
     * @return bool
     */
    public static function increasedProdTempUsedNum($product_temp_id,$add_num=1){
        if(empty($product_temp_id)){
            return false;
        }
        if(!is_int($add_num)||($add_num<1)){
            return false;
        }
        $used_num=DB::table('product_temps')->where(array(
            'product_temp_id'=>$product_temp_id,
            'state'=>1,
        ))->value('used_num');
        if($used_num!==null){
            $add_num+=$used_num ;
        }
        $update_res=DB::table('product_temps')->where(array(
            'product_temp_id'=>$product_temp_id,
            'state'=>1,
        ))->update(array(
            'updated_at'=>time(),
            'used_num'=>$add_num,
        ));
        return ($update_res==1)?true:false;
    }

    /***
     * 获取定制区域下的缩略图
     * @param $product_temp_id
     * @param $colour_id
     * @param $position_type
     * @return null|string
     */
    public  function getProdTempCustomThumbnail($product_temp_id,$colour_id,$position_type)
    {
        try{
            if(empty($product_temp_id)||empty($colour_id)||empty($position_type)){
                return "";
            }
            //产品模板颜色映射表
            $product_temp_colour_id=self::getProductTempColourIdByProductTempIdAndColourId($product_temp_id,$colour_id);
            if(empty($product_temp_colour_id)){
                return "";
            }
            $thumbnail=DB::table('product_temp_custom_zones')
                ->where(array(
                    'prod_temp_colour_id'=>$product_temp_colour_id,
                    'position_type'=>$position_type
                ))->value('thumbnail');
            return empty($thumbnail)?"":$thumbnail;
        }catch (\Exception $e){
            Log::info($e);
            return "";
        }
    }

    /***
     * 判断定制区域下的某一类型的制作工艺有没有记录
     * @param $craftsmanship_type
     * @param $custom_zone_id
     * @param int $state
     * @return bool
     */
    public static function craftsmanshipExistByCraftsmanshipTypeAndZoneId($craftsmanship_type,$custom_zone_id,$state=1){
        if(empty($craftsmanship_type)||empty($custom_zone_id)){
            return false;
        }
        if($state===1){
            $num=DB::table('product_temp_craftsmanships')
                ->where(array(
                    'state'=>1,
                    'craftsmanship_type'=>$craftsmanship_type,
                    'temp_custom_zone_id'=>$custom_zone_id
                ))->count();
        }else{
            $num=DB::table('product_temp_craftsmanships')
                ->where(array(
                    'craftsmanship_type'=>$craftsmanship_type,
                    'temp_custom_zone_id'=>$custom_zone_id
                ))->count();
        }
        return ($num===0)?false:true;
    }

    /***
     * 获取定制区域下的某一类型的制作工艺记录
     * @param $craftsmanship_type
     * @param $custom_zone_id
     * @param int $state
     * @return null
     */
    public static function getCraftsmanshipByCraftsmanshipTypeAndZoneId($craftsmanship_type,$custom_zone_id,$state=1){
        if(empty($craftsmanship_type)||empty($custom_zone_id)){
            return null;
        }
        if($state===1){
            $temp_craftsmanship=DB::table('product_temp_craftsmanships')
                ->where(array(
                    'state'=>1,
                    'craftsmanship_type'=>$craftsmanship_type,
                    'temp_custom_zone_id'=>$custom_zone_id
                ))->first();
        }else{
            $temp_craftsmanship=DB::table('product_temp_craftsmanships')
                ->where(array(
                    'craftsmanship_type'=>$craftsmanship_type,
                    'temp_custom_zone_id'=>$custom_zone_id
                ))->first();
        }
        return $temp_craftsmanship;
    }

    /***
     * ID获取制作工艺
     * @param $id
     * @param int $state
     * @return null
     */
    public static function getCraftsmanshipById($id,$state=1){
        if(empty($id)){
            return null;
        }
        if($state===1){
            $temp_craftsmanship=DB::table('product_temp_craftsmanships')
                ->where(array(
                    'state'=>1,
                    'id'=>$id,
                ))->first();
        }else{
            $temp_craftsmanship=DB::table('product_temp_craftsmanships')
                ->where(array(
                    'id'=>$id,
                ))->first();
        }
        return $temp_craftsmanship;
    }

    /***
     * 判断Sku是不是已经使用
     * @param $id
     * @param $sku
     * @param int $state
     * @return bool
     */
    public static function productTempSkuExistNotCurrentId($id,$sku,$state=1){
        if(empty($id)||empty($sku)){
            return false;
        }
        $query=DB::table('product_temp_stocks')
            ->where(array(
                'sku'=>$sku,
            ));
        if($state===1){
            $query->where('state',1);
        }
        $num=$query->where('id','<>',$id)
            ->count();
        return ($num===0)?false:true;
    }

    /***
     * id获取sku
     * @param $id
     * @param int $state
     * @return null
     */
    public static function getProductTempSkuById($id,$state=1){
        if(empty($id)){
            return null;
        }
        $query=DB::table('product_temp_stocks')
            ->where(array(
                'id'=>$id,
            ));
        if($state===1){
            $query->where('state',1);
        }
        $sku=$query->value('sku');
        return $sku;
    }
    /***
     * 获取设计区域的
     * @param $product_temp_id
     * @param $colour_id
     * @param $position_type
     * @return string
     */
    public static function customZoneBackgroundColourCode($product_temp_id,$colour_id,$position_type){
        if(empty($position_type)||empty($product_temp_id)||!is_int($colour_id)||empty($colour_id)){
            return '';
        }
        $product_temp_colour_id=self::getProductTempColourIdByProductTempIdAndColourId($product_temp_id,$colour_id);
        if(empty($product_temp_colour_id)){
            return '';
        }
        $background_colour_code=DB::table('product_temp_custom_zones')
            ->where(array('state'=>1,'position_type'=>$position_type,'prod_temp_colour_id'=>$product_temp_colour_id))
            ->value('background_colour_code');
        return empty($background_colour_code)?'':$background_colour_code;
    }

    /***
     * 产品模板ID和颜色Id获取product_temp_colours id
     * @param $product_temp_id
     * @param $colour_id
     * @return null
     */
    public static function getProductTempColourIdByProductTempIdAndColourId($product_temp_id,$colour_id){
        if(empty($product_temp_id)||!is_int($colour_id)||empty($colour_id)){
            return null;
        }
        $product_temp_colour_id=DB::table('product_temp_colours')
            ->where(array('state'=>1,'colour_id'=>$colour_id,'product_temp_id'=>$product_temp_id))
            ->value('id');
        return $product_temp_colour_id;
    }
    /***
     * 获取定制区域位置类型对应名称
     * @param $temp_category_id
     * @param $position_type
     * @param int $state
     * @return string
     */
    public static function getTempCustomZonePositionName($temp_category_id,$position_type,$state=1){
        if(empty($temp_category_id)||empty($position_type)){
            return '';
        }
        $query=DB::table('product_temp_custom_zone_positions')
            ->where(array('temp_category_id'=>$temp_category_id,'position_type'=>$position_type));
        if($state===1){
            $query->where('state',1);
        }
          $position_name=$query->value('position_name');
        return empty($position_name)?'':$position_name;
    }

    /***
     * 获取产品模板类型Id
     * @param $product_temp_id
     * @param int $state
     * @return int|string
     */
    public static function getProductTempCategoryIdByProductTempId($product_temp_id,$state=1){
        if(empty($product_temp_id)){
            return '';
        }
        $query=DB::table('product_temps')
            ->where(array('product_temp_id'=>$product_temp_id));
        if($state===1){
            $query->where('state',1);
        }
        $temp_category_id=$query->value('product_temp_category_id');
        return empty($temp_category_id)?0:$temp_category_id;
    }

    /***
     * 查看当前模板是否上架
     * @param $product_temp_id
     * @return int
     */
    public static function productTempIsShelvesByProductTempId($product_temp_id){
        $product_temp_id=trim($product_temp_id);
        $is_shelves=DB::table('product_temps')
            ->where(array('product_temp_id'=>$product_temp_id,'state'=>1))
            ->value('is_shelves');
        return empty($is_shelves)?0:$is_shelves;
    }

    /***
     * 获取定制区域下的所有颜色ID数组
     * @param $temp_craftsmanship_id
     * @return array
     */
    public static function getCraftsmanshipColourIdsByCraftsmanshipId($temp_craftsmanship_id){
        if(empty($temp_craftsmanship_id)||!is_int($temp_craftsmanship_id)){
            return array();
        }
        $query=DB::table('product_temp_craftsmanship_colours')
            ->where(array('product_temp_craftsmanship_id'=>$temp_craftsmanship_id,'state'=>1))
            ->orderBy("sort","ASC")
            ->orderBy("updated_at","DESC");
        $colour_ids=$query->pluck('colour_id')->toArray();
        return empty($colour_ids)?array():$colour_ids;
    }

    /***
     * 数据是不是存在
     * @param $temp_craftsmanship_id
     * @param int $state
     * @return bool
     */
    public static function productTempCraftsmanshipColourExist($id,$state=1){
        if(empty($id)||!is_int($id)){
            return false;
        }
        $query=DB::table('product_temp_craftsmanship_colours')
            ->where(array('id'=>$id));
        if($state===1){
            $query ->where('state',1);
        }
        $num=$query->count();
        return empty($num)?false:true;
    }
    public static function productTempCraftsmanshipExist($temp_craftsmanship_id,$state=1){
        if(empty($temp_craftsmanship_id)||!is_int($temp_craftsmanship_id)){
            return false;
        }
        $query=DB::table('product_temp_craftsmanships')
            ->where(array('id'=>$temp_craftsmanship_id));
        if($state===1){
            $query ->where('state',1);
        }
        $num=$query->count();
        return empty($num)?false:true;
    }

    /***
     * @param $id
     * @param int $state
     * @return bool
     */
    public static function productTempCraftsmanshipColourExistById($id,$state=1){
        if(empty($id)||!is_int($id)){
            return false;
        }
        $query=DB::table('product_temp_craftsmanship_colours')
            ->where(array('id'=>$id));
        if($state===1){
            $query ->where('state',1);
        }
        $num=$query->count();
        return empty($num)?false:true;
    }
    /***
     * 判断工艺下的颜色是不是有绑定
     * @param $temp_craftsmanship_id
     * @param $colour_id
     * @param int $state
     * @return bool
     */
    public static function productTempCraftsmanshipColourExistByCraftsmanshipIdAndColourId($temp_craftsmanship_id,$colour_id,$state=1){
        if(empty($temp_craftsmanship_id)||!is_int($temp_craftsmanship_id)||empty($colour_id)||!is_int($colour_id)){
            return false;
        }
        $query=DB::table('product_temp_craftsmanship_colours')
            ->where(array('product_temp_craftsmanship_id'=>$temp_craftsmanship_id,'colour_id'=>$colour_id));
        if($state===1){
            $query ->where('state',1);
        }
        $num=$query->count();
        return empty($num)?false:true;
    }

    /***
     * 获取产品模板对应颜色id数组
     * @param $product_temp_id
     * @param int $state
     * @return array
     */
    public static function productTempColourIdsByProductTempId($product_temp_id,$state=1){
        if(empty($product_temp_id)){
            return array();
        }
        $query=DB::table('product_temp_colours')
            ->where(array('product_temp_id'=>$product_temp_id));
        if($state===1){
            $query ->where('state',1);
        }
        $colour_ids=$query->pluck('colour_id')->toArray();
        return empty($colour_ids)?array():$colour_ids;
    }

    /***
     * 获取产品模板下的颜色信息
     * @param $product_temp_id
     * @param int $state
     * @return array
     */
    public static function productTempColoursByProductTempId($product_temp_id,$state=1){
        if(empty($product_temp_id)){
            return array();
        }
        $query=DB::table('product_temp_colours')
            ->where(array('product_temp_id'=>$product_temp_id));
        if($state===1){
            $query ->where('state',1);
        }
        $temp_colours=$query->get()->toArray();
        foreach ($temp_colours as $temp_colour){
            $temp_colour->colour_name=ColourTool::getColourNameByColourId($temp_colour->colour_id);
        }
        return empty($temp_colours)?array():$temp_colours;
    }
    /***
     * 获取产品模板尺码名数组
     * @param $product_temp_id
     * @param int $state
     * @return array
     */
    public static function productTempSizeNamesByProductTempId($product_temp_id,$state=1){
        if(empty($product_temp_id)){
            return array();
        }
        $query=DB::table('product_temp_sizes')
            ->where(array('product_temp_id'=>$product_temp_id));
        if($state===1){
            $query ->where('state',1);
        }
        $size_names=$query->pluck('size_name')->toArray();
        return empty($size_names)?array():$size_names;
    }
    /***
     * 判断模板下某一颜色在不在
     * @param $product_temp_id
     * @param $colour_id
     * @param int $state
     * @return bool
     */
    public static function productTempColourExistByProductTempIdAndColourId($product_temp_id,$colour_id,$state=1){
        if(empty($product_temp_id)||empty($colour_id)){
            return false;
        }
        $query=DB::table('product_temp_colours')
            ->where(array('product_temp_id'=>$product_temp_id,'colour_id'=>$colour_id));
        if($state===1){
            $query ->where('state',1);
        }
        $num=$query->count();
        return ($num>0)?true:false;
    }
    /***
     * 非当前id下查看属性名是不是已经存在
     * @param $id  当前id ,
     * @param $temp_category_id
     * @param $name
     * @param int $state
     * @return bool
     */
    public static function tempAttrNameExistsByCategoryIdAndName($id,$temp_category_id,$name,$state=1)
    {
        if(empty($temp_category_id)||empty($name)){
            return false;
        }
        $query= DB::table('product_temp_attributes')->where(array('category_id'=>$temp_category_id,'attr_name'=>$name));
        if($state===1){
            $query->where('state',1);
        }
        if(!empty($id)){
            $query->where('attr_id','<>',$id);
        }
        $num=$query->count();
        return ($num>0)?true:false;
    }

    /***
     * id获取产品模板下一条颜色信息
     * @param $id
     * @param int $state
     * @return null
     */
    public static function getProductTempColourById($id,$state=1){
        if(!is_int($id)){
            return null;
        }
        $query=DB::table('product_temp_colours')->where(array('id'=>$id));
        if($state===1){
            $query->where('state',1);
        }
        $temp_colour=$query->first();
        return $temp_colour;
    }

    /***
     * 更新模板单价
     * @param $product_temp_id
     * @param $colour_id
     * @param $price
     * @return bool
     */
    public static function updateProductTempColourPrice($product_temp_id,$colour_id,$price){
        if(empty($product_temp_id)||!is_numeric($price)||!is_numeric($colour_id)){
            return false;
        }
        $price=floatval($price);
        $colour_id=intval($colour_id);
        $update_res=DB::table('product_temp_colours')->where(array(
            'product_temp_id'=>$product_temp_id,
            'colour_id'=>$colour_id,
            'state'=>1,
        ))->update(array(
            'original_price'=>$price,
            'updated_at'=>time(),
        ));
        return ($update_res>0)?true:false;
    }

    /***
     * 产品模板id获取产品模板
     * @param $product_temp_id
     * @param int $state
     * @return null
     */
    public static function getProductTempByProductTempId($product_temp_id,$state=1){
        if(empty($product_temp_id)){
            return null;
        }
        $query =DB::table('product_temps')->where(array(
            'product_temp_id'=>$product_temp_id,
        ));
        if($state===1){
            $query->where('state',1);
        }
        $product_temp=$query->first();
        if(!empty($product_temp)){
            $product_temp->brand_name=BrandToolService::getBrandNameByBrandId($product_temp->brand_id);
        }
        return $product_temp;
    }
    /***
     * 产品模板ID获取产品模板分类
     * @param $product_temp_id
     * @param $state
     * @return int
     */
    public static function getCategoryIdByProductTempId($product_temp_id,$state=1){
        if(empty($product_temp_id)){
            return 0;
        }
        $query =DB::table('product_temps')->where(array(
            'product_temp_id'=>$product_temp_id,
        ));
        if($state===1){
            $query->where('state',1);
        }
        $category_id=$query->value('product_temp_category_id');
        return empty($category_id)?0:$category_id;
    }

    /***
     * sku获取产品模板的库存信息
     * @param $sku
     * @param int $state
     * @return null
     */
    public function getProductTempStockBySku($sku,$state=1){
        if(empty($sku)){
           return null;
        }
        $query =DB::table('product_temp_stocks')->where(array(
            'sku'=>$sku,
        ));
        if($state===1){
            $query->where('state',1);
        }
        $product_temp_stock=$query->first();
        return $product_temp_stock;
    }

    /***
     * 查看sku是不是存在
     * @param $sku
     * @param int $state
     * @return bool
     */
    public function getProductTempSkuExistBySku($sku,$state=1){
        if(empty($sku)){
            return false;
        }
        $query =DB::table('product_temp_stocks')->where(array(
            'sku'=>$sku,
        ));
        if($state===1){
            $query->where('state',1);
        }
        $num=$query->count();
        return ($num>0)?true:false;
    }

    /***
     * 获取产品模板实际库存
     * @param $product_temp_id
     * @param $colour_name
     * @param $size_name
     * @return int
     */
    public static function getProductTempAcualStock($product_temp_id,$colour_name,$size_name){
        if(empty($product_temp_id)||empty($colour_name)||empty($size_name)){
            return 0;
        }
        $query=DB::table('product_temp_stocks')
            ->where(array(
                'state'=>1,
                'product_temp_id'=>$product_temp_id,
                'colour_name'=>$colour_name,
                'size_name'=>$size_name
            ));
        $num=$query->value('actual_stock');
        return empty($num)?0:$num;
    }

    /***
     * 产品模板实际库存能不能买
     * @param $product_temp_id
     * @param $colour_name
     * @param $size_name
     * @param int $num
     * @return bool
     */
    public static function isCanBuyTempByAcualStock($product_temp_id,$colour_name,$size_name,$num=1)
    {
        if (empty($product_temp_id) || empty($colour_name) || empty($size_name)||!is_int($num)||($num<1)) {
            return false;
        }
        $actual_stock=self::getProductTempAcualStock($product_temp_id,$colour_name,$size_name);
        if($actual_stock<$num) {
            return false;
        }
        return true;
    }

    /***
     * 产品模板Id获取分类名
     * @param $product_temp_id
     * @return string
     */
    public function getCategoryNameByTempId($product_temp_id){
        if(empty($product_temp_id)) return '';
        $temp_category_id=DB::table('product_temps')
            ->where('product_temp_id',$product_temp_id)
            ->value('product_temp_category_id');
        if(empty($temp_category_id)) return '';
        $category_name=ProdTempCategoryTool::productTempCategoryNameByProdTempCategoryId($temp_category_id);
        return $category_name;
    }

    /***
     * 板名模糊搜索模板ID
     * @param $name
     * @param int $state
     * @return array
     */
    public function searchProdTempList($name,$state=1)
    {
        $query= DB::table('product_temps');
        if($state===1){
            $query->where('state',1);
        }
        $query ->where('name','like','%'.$name.'%');
        $product_temp_ids=$query->pluck('product_temp_id')->toArray();
        return empty($product_temp_ids)?array():$product_temp_ids;
    }

    /***
     * 获取设计区域默认颜色Id数组好获取
     * @param int $state
     * @return array
     */
    public function getAllCraftsmanshipDefaultColourIds($state=1)
    {
        $query= DB::table('product_temp_craftsmanship_default_colours');
        if($state===1){
            $query->where('state',1);
        }
        $colour_ids=$query->pluck('colour_id')->toArray();
        return empty($colour_ids)?array():$colour_ids;
    }

    /***
     * 判断设计区域默认颜色Id中有没有对应颜色
     * @param $colour_id
     * @param int $state
     * @return bool
     */
    public function craftsmanshipDefaultColourIdExistByColourId($colour_id,$state=1)
    {
        if(empty($colour_id)||!is_numeric($colour_id)){
            return false;
        }
        $query= DB::table('product_temp_craftsmanship_default_colours');
        if($state===1){
            $query->where('state',1);
        }
        $num=$query->where('colour_id',$colour_id)->count();
        return ($num>0)?true:false;
    }

    /***
     * 根据平台判断是不是安卓客户端
     * @param $platform
     * @return bool
     */
    public static function isAndroidByPlatform($platform){
       if(!empty($platform)&&strtoupper($platform)=="ANDROID") return true;
       return false;
    }
}